package coin;

import java.math.BigDecimal;
import java.util.List;
/*
*
* 计商品的优惠标签

* @param originalPrice   原价(来扣除优惠前的价格)

* @param finalPrice   到手价《扣除所有优惠后的价格，即用户需要实际支付的金额)
* @param historicalPricelist   历史到手价列表
*
 */
public class demo {
    public static String computeProductPromoTag(BigDecimal originalPrice, BigDecimal finalPrice, List<BigDecimal> historicalPriceList) {
        // 判断是否为历史最低价
        if (isHistoricalLowest(finalPrice, historicalPriceList)) {
            return "历史最好价";
        }
        // 判断是否为近3个月最低价
        if (isRecentLowest(finalPrice, historicalPriceList)) {
            return "近3月最好价";
        }
        // 判断是否有折扣
        if (hasDiscount(originalPrice, finalPrice)) {
            // 计算折扣，保留一位小数，向下取整
            BigDecimal discount = originalPrice.subtract(finalPrice).setScale(1, BigDecimal.ROUND_DOWN);
            return finalPrice.compareTo(BigDecimal.ZERO) == 0 ? "免费" : "打" + discount.toString() + "折";
        }
        // 兜底文案
        return "到手价";
    }

    private static boolean isHistoricalLowest(BigDecimal finalPrice, List<BigDecimal> historicalPriceList) {
        for (BigDecimal price : historicalPriceList) {
            if (price.compareTo(finalPrice) < 0) {
                return false;
            }
        }
        return true;
    }

    private static boolean isRecentLowest(BigDecimal finalPrice, List<BigDecimal> historicalPriceList) {
        // 假设近3个月的最低价为最近的3个历史价格中的最小值
        List<BigDecimal> recentHistory = historicalPriceList.subList(historicalPriceList.size() - 3, historicalPriceList.size());
        for (BigDecimal price : recentHistory) {
            if (price.compareTo(finalPrice) < 0) {
                return false;
            }
        }
        return true;
    }

    private static boolean hasDiscount(BigDecimal originalPrice, BigDecimal finalPrice) {
        return originalPrice.compareTo(finalPrice) != 0 && finalPrice.compareTo(BigDecimal.ZERO) != 0;
    }
}